//
// Created by liushuai on 2021/2/16.
//

#include "sumOfLeftLeaves.h"
//bool isLeafNode(TreeNode* node) {
//    return !node->left && !node->right;
//}
//
//int sumOfLeftLeaves(TreeNode* root) {
//    if (!root) {
//        return 0;
//    }
//
//    queue<TreeNode*> q;
//    q.push(root);
//    int ans = 0;
//    while (!q.empty()) {
//        TreeNode* node = q.front();
//        q.pop();
//        if (node->left) {
//            if (isLeafNode(node->left)) {
//                ans += node->left->val;
//            }
//            else {
//                q.push(node->left);
//            }
//        }
//        if (node->right) {
//            if (!isLeafNode(node->right)) {
//                q.push(node->right);
//            }
//        }
//    }
//    return ans;
//}

bool isLeaf(TreeNode *root) {
    if (root && !root->left && !root->right)
        return true;
    else
        return false;
}

int sumOfLeftLeaves(TreeNode *root) {
    if (!root)
        return 0;
    else {
        int value = 0;
        queue<TreeNode *> q;
        q.push(root);
        while (!q.empty()) {
            TreeNode *currentNode = q.front();
            q.pop();
            if (currentNode->left) {
                if (isLeaf(currentNode->left))
                    value += currentNode->left->val;

                q.push(currentNode->left);
            }
            if (currentNode->right)
                q.push(currentNode->right);
        }
        return value;
    }

}